package com.bjpowernode.handler;

import com.bjpowernode.util.ServiceTools;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyIncationHandler implements InvocationHandler {

    //目标对象
    private Object target; //SomeServiceImpl类

    public MyIncationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //通过代理对象执行方法时，会调用执行这个invoke（）
        String methodName = method.getName();
        System.out.println(this.getClass().getSimpleName() + ":进入MyIncationHandler中的invoke()--method名称：" + methodName);

        Object res = null;

        // 此处模拟切面判断逻辑
        // 实际上，是通过配置或者注解，拿到的JoinPoint，通过JoinPoint进行的判断
        if ("doSome".equals(methodName)) {
            //在目标方法之前，输出时间
            ServiceTools.doLog();
            //执行目标类的方法，通过Method类实现
            //SomeServiceImpl.doSome()
            res = method.invoke(target, args);
            ServiceTools.doTrans(); //在目标方法执行之后，提交事务
        } else {
            //SomeServiceImpl.doOther()，不进行增强
            System.out.println(this.getClass().getSimpleName() + "：invoke的不是doSome，不进行增强--method名称：" + methodName);

            res = method.invoke(target, args);
        }

        //目标方法的执行结果
        return res;
    }
}
